/**
 *
 */
function validateAll(){
	cleanDivValidationMessage();
	cleanErrorCssClass();

	firstInput = true;

	var result = true;
	for(var i = 0; i < requireds.length;i++){
		if(($("#" + requireds[i]) != null && $("#" + requireds[i]).val() == "") && 
				(excludes[requireds[i]] == undefined 
						|| excludes[requireds[i]] == null 
						|| !excludes[requireds[i]])){	

			var errorField = $("#" + requireds[i]);					
			showValidationMessage(mandatoryMessage.replace("{0}",$("#" + requireds[i] + "_label").html()),"warn",errorField,false);
			result =  false;
		}
	}

	for(var i = 0; i< numerics.length;i++){
		if($("#" + numerics[i]) != null && $("#" + numerics[i]).val() != "" && !isNumeric($("#" + numerics[i]))){
			var errorField = $("#" + numerics[i]);
			showValidationMessage(numericMessage.replace("{0}",$("#" + requireds[i] + "_label").html()),"warn", errorField,false);
			result = false;
		}
	}

	for(var i = 0; i< dates.length;i++){						
		if($("#" + dates[i]) != null && $("#" + dates[i]).val() != "" && !checkdate($("#" + dates[i]).val())){
			var errorField = $("#" + dates[i]);
			showValidationMessage(dateMessage.replace("{0}",$("#" + requireds[i] + "_label").html()),"warn",errorField,false);
			result = false;
		}
	}

	for(var i = 0; i< dateTimes.length;i++){						
		if($("#" + dateTimes[i]) != null && $("#" + dateTimes[i]).val() != "" && !date_checkdateAndTime($("#" + dateTimes[i]).val())){
			var errorField = $("#" + dateTimes[i]);
			showValidationMessage(dateMessage.replace("{0}",$("#" + requireds[i] + "_label").html()),"warn", errorField,false);
			result = false;
		}
	}
	var post_validate = abstract_validate();

	return result && post_validate;

}


/**
* Este metodo se debe sobreescribir en los manteniemientos que tengan alguna validacion excepcional
**/
function abstract_validate(){
	return true;
}

function val_setRequires(arg){
	requireds = arg;
} 
function val_setNumerics(arg){
	numerics = arg;
} 
function val_setDates(arg){
	dates = arg;
} 
function val_setDateTimes(arg){
	dateTimes = arg;
} 
/**
 * Partiendo de un conjunto inicial de campos a validar, dinamicamente se pueden ir excluyendo los campos que hagan falta
 * @param {Object} key
 */
function val_addExclude(key){excludes[key] = true; }
/**
 * A traves del siguiente metodo, un campo que fue exluido de la validacion puede volver a ser insertado.
 * @param {Object} key
 */
function val_removeExclude(key){excludes[key] = false;}
	
/**
 * Esta funcion muestra los mensajes de validacion como lo haria el formulario de Sprin mvc.
 * Solo permite mostrar un mensaje cada vez.
 * @param {Object} message
 * @param {Object} level
 * @param {Object} input
 */
function showValidationMessage(message, level, input,clean){
	if(clean){
		cleanDivValidationMessage();
	}

	input.addClass("campoErroneo");

	if(input.type != "hidden" && !input.hasClass("hidden")){ 	 	
		if(firstInput){
			firstInput = false;
			input.focus();
		} 			
	}

	 //Si ya esta creado el div meidante los errores de spring lo utilizamos par aque no aparezcan los dos, y si no utilzamos uno propio
	$("#errorJsMessage").removeClass("hidden");
	$("#errorJsMessage").html($("#errorJsMessage").html() + message + "<br>");
}
	 
function cleanDivValidationMessage(){
	$("#errorJsMessage").html("");
	$("#errorJsMessage").addClass("hidden");
}

function cleanErrorCssClass() {

	for(var i = 0; i< requireds.length;i++){
		var errorField = requireds[i];
		
		if($(errorField) != null) {
			$(errorField).removeClass('campoErroneo');
		}
	}
	
	for(var i = 0; i< numerics.length;i++){
		var errorField = $("#" + numerics[i]);
		
		if($(errorField) != null) {
			$(errorField).removeClass('campoErroneo');
		}
	}
	
	for(var i = 0; i< dates.length;i++){
		var errorField = $("#" + dates[i]);
		
		if($(errorField) != null) {
			$(errorField).removeClass('campoErroneo');
		}
	}

	for(var i = 0; i< dateTimes.length;i++){
		var errorField = $("#" + dateTimes[i]);
		
		if($(errorField) != null) {
			$(errorField).removeClass('campoErroneo');
		}
	}
}
	 